Non-volatile memory systems typically store data in memory cells by way of dividing up an available voltage range in a given memory cell into different states that are associated with a particular value. A basic example of dividing the available threshold voltage range of a memory cell is seen with a single level cell (SLC) memory cell designed to store 1 bit of information. The 1 bit of information may be represented as a “0” or a “1” by essentially dividing the cell voltage range in half, with one half of the range representing the “0” state and the other half of the range representing the “1” state. Memory cells may be configured to hold more than one bit of data by more finely dividing the voltage range of the cell into the number of states necessary to store the desired number of bits. These memory cells are often referred to as multi-level cells (MLC). For example, a memory cell designed to hold 3 bits of data would need its voltage range divided into 8 states to represent the 3 bits.
A non-volatile memory cell is typically programmed by injecting small amounts of charge into the cell until the voltage level representative of the information to be stored in that cell is reached. One process used in programming cells is referred to as program-verify loop where, after one or more programming pulses are applied to increase a voltage level in the cell, a verify stage to check on the progress of the programming in the cell is executed. A physical characteristic of some non-volatile memory cells is that the manner in which program-verify loops are executed can affect data retention capabilities of the memory cell.